package utils

import (
	"context"
	"fmt"
	"gitcode.com/G-YT/iHealth25/server/plugin/weixin/global"
	"github.com/wechatpay-apiv3/wechatpay-go/core"
	"github.com/wechatpay-apiv3/wechatpay-go/core/option"
	"github.com/wechatpay-apiv3/wechatpay-go/utils"
)

// CreateWechatPayClient 创建官方微信支付SDK客户端
func CreateWechatPayClient() (*core.Client, error) {
	// 使用 utils 包来加载商户私钥，商户私钥用来生成请求的签名
	mchPrivateKey, err := utils.LoadPrivateKeyWithPath(global.WxPayConfig.KeyPath)
	if err != nil {
		return nil, fmt.Errorf("加载商户私钥失败: %v", err)
	}

	// 获取证书序列号
	certificateSerialNo := global.WxPayConfig.MchCertificateSerialNumber

	// 使用商户私钥等初始化 client，并使它具有自动定时获取微信支付平台证书的能力
	opts := []core.ClientOption{
		option.WithWechatPayAutoAuthCipher(global.WxPayConfig.MchID, certificateSerialNo, mchPrivateKey, global.WxPayConfig.MchAPIv3Key),
	}
	client, err := core.NewClient(context.Background(), opts...)
	if err != nil {
		return nil, fmt.Errorf("创建微信支付客户端失败: %v", err)
	}

	return client, nil
}
